package com.algorithm.liyc.combine;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * 0078.子集
 *
 * 给定一组不含重复元素的整数数组 nums，返回该数组所有可能的子集（幂集）。
 * 说明：解集不能包含重复的子集。
 *
 * @author Liyc
 * @date 2024/1/23 9:33
 **/

public class Solution8 {
    private List<List<Integer>> result = new ArrayList<>();// 存放符合条件结果的集合
    private LinkedList<Integer> path = new LinkedList<>();// 用来存放符合条件结果
    public List<List<Integer>> subsets1(int[] nums) {
        subsets2(nums, 0);
        return result;
    }

    public void subsets2(int[] nums, int startIndex) {
        result.add(new ArrayList<>(path));//「遍历这个树的时候，把所有节点都记录下来，就是要求的子集集合」。
        if (startIndex >= nums.length) {//终止条件可不加
            return;
        }

        for (int i = startIndex; i < nums.length; i++) {
            path.add(nums[i]);
            subsets2(nums, i+1);
            path.remove(path.size() - 1);
        }
    }
}
